/**
 * 
 */
package br.com.beyondclick.controller;

import java.util.Calendar;
import java.util.Date;

import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.validation.Validate;
import net.sourceforge.stripes.validation.ValidateNestedProperties;
import br.com.beyondclick.model.entity.Material;
import br.com.beyondclick.model.entity.Orgao;
import br.com.beyondclick.model.entity.Pedido;
import br.com.beyondclick.model.entity.PedidoMaterial;
import br.com.beyondclick.model.repository.PedidoRepository;
import br.com.gentech.commons.controller.DefaultCRUDActionBean;
import br.com.gentech.commons.model.repository.Repository;

import com.samaxes.stripejb3.EJBBean;

/**
 * @author AC de Souza
 */
public class PedidoActionBean extends DefaultCRUDActionBean<Pedido, Long> {

	@ValidateNestedProperties( {
		@Validate(field = "orgao.id", required = true, on = "salvar"),
		@Validate(field = "data", required = true, on = "salvar") 
	})
	private Pedido entidade;
	@Override
	public Pedido getEntidade() { return entidade; }
	public void setEntidade(Pedido entidade){ this.entidade = entidade; }

	@EJBBean("PedidoRepositoryBeanRemote")
	private PedidoRepository pedidoRepository;
	public PedidoRepository getRepository(){ return pedidoRepository;	}

	@Override
	protected Long parseId(String id) {
		return Long.valueOf(id);
	}

	@EJBBean("RepositoryBean")
	private Repository<Orgao, Long> orgaoRepository;
	@EJBBean("RepositoryBean")
	private Repository<Material, Long> materialRepository;
	public Resolution cadastrar(){
		context.getRequest().setAttribute("orgaos", orgaoRepository.find(Orgao.class) );
		context.getRequest().setAttribute("materiais", materialRepository.find(Material.class) );

		return super.cadastrar();
	}
	
	private PedidoMaterial materialPedido;

	@Validate(field="inicio", required=true, on="buscar")
	private Date inicio;
	
	@Validate(field="fim", required=true, on="buscar")
	private Date fim;

	public Resolution addMaterial(){
		context.getRequest().setAttribute("orgaos", orgaoRepository.find(Orgao.class) );
		context.getRequest().setAttribute("materiais", materialRepository.find(Material.class) );

		String materialId = context.getRequest().getParameter("materialPedido.material.id"); 
		Material material = materialRepository.find( Material.class, Long.valueOf(materialId) );
		materialPedido.setMaterial(material);

		getEntidade().addMateriaisPedidos(materialPedido);
		materialPedido = new PedidoMaterial();
		return new ForwardResolution( getPAGINA_EDITAR() );
	}

	public Resolution remMaterial(){
		String strIndex = context.getRequest().getParameter("excluirPedidoMaterialId");
		getEntidade().getMateriaisPedidos().remove( Integer.valueOf(strIndex).intValue() );
		
		return new ForwardResolution( getPAGINA_EDITAR() );
	}

	@DefaultHandler
	public Resolution listar() {
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		
		cal.set(Calendar.DAY_OF_MONTH, 1);
		inicio = cal.getTime();

		cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
		fim = cal.getTime();
		context.getRequest().setAttribute("listaEntidade", getRepository().find(inicio, fim));

		return new ForwardResolution(getPAGINA_LISTAR());
	}
	public Resolution buscar(){
		context.getRequest().setAttribute("listaEntidade", getRepository().find(inicio, fim));
		return new ForwardResolution(getPAGINA_LISTAR());
	}

	/**
	 * @return the materialPedido
	 */
	public PedidoMaterial getMaterialPedido() {
		return materialPedido;
	}

	/**
	 * @param materialPedido the materialPedido to set
	 */
	public void setMaterialPedido(PedidoMaterial materialPedido) {
		this.materialPedido = materialPedido;
	}

	public Date getFim() {
		return fim;
	}

	public void setFim(Date fim) {
		this.fim = fim;
	}

	public Date getInicio() {
		return inicio;
	}

	public void setInicio(Date inicio) {
		this.inicio = inicio;
	}
}